package day1_java数据类型变量;

public class Demo05Operator {

    public static void main(String[] args) {


        // 算术运算符  赋值运算符 比较运算符
        // + - * / % ++  --
        // % 取模运算 一定是相对于整数而言的
        // System.out.println("3" - 1); // 报错

        int a = 1;
        int b = a++;
        System.out.println(a); // 1X  2√
        System.out.println(b); // 1√

        int c = 1;
        int d = ++c;
        System.out.println(c); // 2
        System.out.println(d); // 2

        int e = 2;
        int f = 2;
        e++; // 2
        --f; // 1
        System.out.println(e); // 3
        System.out.println(f); // 1

        // 赋值运算符 = += -= *= /+ %=
        String s1 = "魏正阳 别睡觉了";
        s1 += "!!!!!";

        System.out.println(s1);

        // == !=
        System.out.println("5".equals("6"));
        System.out.println(5 == 6);

        // 逻辑运算符 demo代码
        boolean b1 = 100 > 10; // true
        boolean b2 = false;
        boolean b3 = 9 > 16; // false
        boolean b4 = true;
        System.out.println(b1 & b4 & b2); // false
        System.out.println(b1 && b4 & b2); // false

        // && 举例demo
        int num1 = 0;
        boolean res1 = false && (num1++ > 0); // 你认为 num1 = 1,
        System.out.println("第一个num1" + num1); // 实际上是 num1 = 0. 是因为 &&只要能判断出结果则后边的部分就不再判断

        boolean res2 = false & (num1++ > 0); // 你认为 num1 = 2
        System.out.println("第二个num1" + num1); // 实际上 num1 = 1

        System.out.println("res1===" + res1); // false
        System.out.println("res2===" + res2); // false
        // 当使⽤短路与或者短路或时，只要能判断出结果则后边的部分就不再判断。


        // 优先级
        // 大部分和js中的优先级是一样的,只有js没有的不一样  >> <<  >>>(这三个跟二进制的位操作有关)
        // << 左移操作符, 将左操作数的所有位 向左 移动 指定的位数, 右边位空出来的用 0 填充
        int num2 = 5; // 二进制 0b101
        int res3 = num2 << 1; // 0b1010;
        System.out.println(res3);

        // >> 右移操作符 将左操作数的所有位 向右 移动指定的位数.
        // 如果是正数, 右边空出来的位用 0 填充, 对于负数 右边空出来的位用1填充
        int num3 = 5; // 二进制 0b101 0b10
        int res4 = num3 >> 1;
        System.out.println(res4); // 2的二进制是 0b10

//        int num4 = -8; // 二进制 -0b100
//        System.out.println(-0b1000);
//        int res5 = num4 >> 2;
//        System.out.println(res5);

        int i = 15;  // 0b00001111 ===2==> 0b11;
        int res6 = i >> 2;

        // >>> 无符号右移操作符, 将左操作数的所有位向右移动指定的位数 无论正负,右边空出来的位都用0填充
        int num5 = 8; // 0b1000 0b_00_10  0b10
        int res7 = num5 >>> 2;
        System.out.println(res7);
    }
}
